package org.xqyy.eval.service.impl;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.xqyy.eval.dao.TEvalDetailMapper;
import org.xqyy.eval.dao.TEvalMasterMapper;
import org.xqyy.eval.model.TEvalDetail;
import org.xqyy.eval.model.TEvalMaster;
import org.xqyy.eval.model.TestPaper;
import org.xqyy.eval.service.IDeptMapperService;
import org.xqyy.eval.service.IEvalMasterService;

import java.util.List;

@Service
@Slf4j
public class EvalMasterService implements IEvalMasterService {

    @Autowired
    private TEvalMasterMapper evalMasterMapper;
    @Autowired
    private TEvalDetailMapper evalDetailMapper;
    @Autowired
    private IDeptMapperService deptMapperService;
    /**
     * 提交评价问卷
     *
     * @param evalMasterList 每个被评价科室的试卷
     * @return
     */
    @Override
    @Transactional
    public Boolean submitEvalMaster(List<TEvalMaster> evalMasterList) {
        for (TEvalMaster evalMaster : evalMasterList) {
            submitEvalMaster(evalMaster,evalMaster.getEvalDetails());
            log.info("{}科室成功评价{}评价周期{}",evalMaster.getDutyId()
                    ,evalMaster.getEvaldutyId(),evalMaster.getEvalyearmonth());
        }
        return true;
    }

    /**
     * 提交评价问卷
     * @param evalMaster 评价问卷
     * @param evalDetails 每道题信息
     * @return
     */
    @Override
    @Transactional
    public Boolean submitEvalMaster(TEvalMaster evalMaster, List<TEvalDetail> evalDetails) {
        evalMaster = addEvalMaster(evalMaster);
        for (TEvalDetail evalDetail : evalDetails) {
            evalDetail.setMasterid(evalMaster.getId());
            evalDetailMapper.insert(evalDetail);
        }
        return true;
    }

    /**
     * 根据评价科室和评价试卷id查询是否存在
     *
     * @param dutyId 科室id
     * @param paperId  试卷id
     * @param evalyearmoth 填报周期
     * @return
     */
    @Override
    public Boolean evalMasterIsPresence(String dutyId, Integer paperId,String evalyearmoth) {
        TEvalMaster evalMaster = new TEvalMaster();
        evalMaster.setDutyId(dutyId);
        evalMaster.setPaperid(paperId);
        evalMaster.setEvalyearmonth(evalyearmoth);
        if (evalMasterMapper.selectCount(evalMaster) > 0 ){
            return true;
        }

        return false;
    }

    /**
     * 查询该科室在本周期内填报的调查问卷是否是满分的
     * @param dutyId       科室id
     * @param evalyearmoth 填报周期
     * @return
     */
    @Override
    public Boolean evalIsFullscore(String dutyId, String evalyearmoth) {
        TEvalMaster tEvalMaster = new TEvalMaster();
        tEvalMaster.setDutyId(dutyId);
        tEvalMaster.setEvalyearmonth(evalyearmoth);
        List<TestPaper> testPaperList =  deptMapperService.selectDeptUpcomingPaper(dutyId);
        if (testPaperList.size() == 1 && evalMasterMapper.selectCount(tEvalMaster) == 0){
            return true;
        }
        if (evalMasterMapper.selectCount(tEvalMaster) > 0){
            if (testPaperList.size() > 1){
                return false;
            }
            List<TEvalDetail> evalDetails =  evalDetailMapper.selectNotFullScoreByDetpIdAndYearMonth(dutyId,evalyearmoth);
            if (evalDetails.size() > 0){
                return false;
            }else{
                return true;
            }
        }else {
            return  false;
        }


    }

    /**
     * 根据科室id和填报周期查询已经填报过的调查问卷
     *
     * @param dutyId       科室id
     * @param evalyearmoth 填报周期
     * @return
     */
    @Override
    public List<TEvalMaster> selectEvalEdMasterByYearMonthAndDutyId(String dutyId, String evalyearmoth) {
        return evalMasterMapper.evalEdMasterByYearMonthAndDutyId(evalyearmoth,dutyId);
    }

    /**
     * 根据id查询调查问卷主记录
     *
     * @param id
     * @return
     */
    @Override
    public TEvalMaster findTEvalMasterById(String id) {
        return evalMasterMapper.selectByPrimaryKey(id);
    }

    /**
     * 添加评价问卷主信息
     * @param evalMaster 评价问卷
     * @return
     */
    private  TEvalMaster addEvalMaster(TEvalMaster evalMaster){
        evalMasterMapper.insert(evalMaster);
        return  evalMaster;
    }
}
